/*六元组的和，积不变，所以哈希函数就是（和+积）%mod*/
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e5 + 3;
const int N = 1e5 + 3;
struct NODE
{
	int val[6], next;
} insect[N];//结构体用于存储六元组

int n, h[N], idx;//		h[i]存储哈希值i对应的头指针
int F(int *a)
{
	long long sum = 0, pro = 1;
	for (int i = 0; i < 6; i++) // 哈希函数
	{
		sum = (sum + a[i]) % mod; // 求和
		pro = pro * a[i] % mod;	  // 求积
	}
	return (sum + pro) % mod;
}

bool equal(int *a, int *b) // 判断两个六元组是否相等
{
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j < 6; j++)//这两层循环遍历所有可能的起始位置
		{
			bool flag = true;
			for (int k = 0; k < 6; k++)
			{
				if (a[(i + k) % 6] != b[(j + k) % 6])
					flag = false;
			}
			if (flag)
				return true;
			flag = true;
			for (int k = 0; k < 6; k++)
			{
				if (a[(i + k) % 6] != b[(j - k + 6) % 6])
					flag = false;
			}
			if (flag)
				return true;
		}
	}
	return false;
}

bool find(int *a)
{
	int k = F(a);
	for (int i = h[k]; i != -1; i = insect[i].next)//遍历数组h中的元素，直到遇到-1为止
		if (equal(insect[i].val, a))
			return true;
	return false;
}

void insert(int *a)
{
	int k = F(a);
	memcpy(insect[idx].val, a, 6 * sizeof(int));
	insect[idx].next = h[k];
	h[k] = idx;
	idx++;
}
int main()
{
	memset(h, -1, sizeof h); // 哈希表里面的所有值赋值为-1
	cin >> n;
	while (n--)
	{
		int a[6];
		for (int i = 0; i < 6; i++)
		{
			cin >> a[i];
		}
		if (find(a))
		{
			cout << "found.";
			return 0;
		}
		else
			insert(a);
	}
	cout << "No";
	return 0;
}
